/****************************************************************************
 * Copyright 2009 Huascar A. Sanchez                                        *
 *                                                                          *
 * Licensed under the Apache License, Version 2.0 (the "License");          *
 * you may not use this file except in compliance with the License.         *
 * You may obtain a copy of the License at                                  *
 *                                                                          *
 *     http://www.apache.org/licenses/LICENSE-2.0                           *
 *                                                                          *
 * Unless required by applicable law or agreed to in writing, software      *
 * distributed under the License is distributed on an "AS IS" BASIS,        *
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
 * See the License for the specific language governing permissions and      *
 * limitations under the License.                                           *
 ****************************************************************************/
package com.gotobject.filter.internal;

import com.gotobject.filter.internal.Pair;

import static java.util.Arrays.asList;
import java.util.Iterator;

/**
 * @author huascar.sanchez@gmail.com (Huascar A. Sanchez)
 */
public class ToStrings {
    private ToStrings(){}

    private static String toString(Class<?> k, Pair<String, String>... pairs){
        return toString(k.getSimpleName(), pairs);
    }

    public static String str(Object o){
        return o == null ? "null" : o.toString();
    }

    private static String toString(String name, Pair<String, String>... pairs){
        final StringBuilder msg = new StringBuilder(name).append("(");
        for(Iterator<Pair<String, String>> itr = asList(pairs).iterator(); itr.hasNext();){
            final Pair<String, String> token            = itr.next();
            final boolean              isNextNotAvailable  = !itr.hasNext();

            msg.append(token.getLeft()).append("=").append(token.getRight());
            msg.append(isNextNotAvailable ? ")": ", ");
        }
        return msg.toString();
    }
    
    public static String toString(Object o, Pair<String, String>... pairs){
        if(asList(pairs).contains(null) || pairs == null || pairs.length == 0) throw new IllegalArgumentException("missing arguments.");
        return toString(o.getClass(), pairs);
    }
}
